package $2_1oo;

public class ApiFunction {

    public static void main(String[] args) {
        // 接口，在抽象类中，抽象方法本质上是定义接口规范。
        // 如果一个抽象类没有字段，所有方法全部都是抽象方法，就可以把该抽象类改写为接口：interface。
        // 所谓interface，就是比抽象类还要抽象的纯抽象接口，因为它连字段都不能有。
        // 因为接口定义的所有方法默认都是public abstract的，所以这两个修饰符不需要写出来（写不写效果都一样）。
        // 当一个具体的class去实现一个interface时，需要使用implements关键字。
        // 在Java中，一个类只能继承自另一个类，不能从多个类继承。但是，一个类可以实现多个interface
        // 接口继承:
        // 一个interface可以继承自另一个interface。interface继承自interface使用extends，它相当于扩展了接口的方法。
        // 在接口中，可以定义default方法。实现类可以不必覆写default方法。
        // default方法的目的是，当我们需要给接口新增一个方法时，会涉及到修改全部子类。
        // 如果新增的是default方法，那么子类就不必全部修改，只需要在需要覆写的地方去覆写新增方法。
        // default方法和抽象类的普通方法是有所不同的。因为interface没有字段，default方法无法访问字段，而抽象类的普通方法可以访问实例字段。


    }

}

interface Hello {
    void hello();
}

interface Personk extends Hello {
    String getName();
    default void run() {
        System.out.println(getName() + " run");
    }
}

abstract class Studentk implements Personk {
    private String name;

    public Studentk(String name) {
        this.name = name;
    }

    @Override
    public void run() {
        System.out.println(this.name + " run");
    }

    @Override
    public String getName() {
        return this.name;
    }

    
}